package cn.itcast.ssh.service;

import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

import cn.itcast.ssh.domain.Employee;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;

import cn.itcast.ssh.domain.LeaveBill;
import cn.itcast.ssh.bean.WorkflowBean;



public interface IWorkflowService {

    /**
     * 发布流程
     * @param file 上传的文件
     * @param processName 流程名称
     */
	void saveNewDeploy(File file, String processName);

	/**
	 * 查询部署列表信息
	 */
	List<Deployment> findDeploymentList();

	/**
	 * 查询流程定义列表信息
	 */
	List<ProcessDefinition> findProcessDefinitionList();

    /**
     * 查看流程图
     * @param deploymentId 部署id
     * @param imageName imageName
     */
	InputStream findImageInputStream(String deploymentId, String imageName);

    /**
     * 根据部署id删除流程定义
     * @param deploymentId deploymentId
     */
	void deleteProcessDefinitionByDeploymentId(String deploymentId);

    /**
     * 申请请假，开始流程
     * @param leaveBillId 请假单id
     * @param employee 实体
     */
	void saveStartProcess(Long leaveBillId, Employee employee);

    /**
     * 获取指定名称的当前任务集合
     * @param name 名称
     */
	List<Task> findTaskListByName(String name);

    /**
     * 根据任务id找到任务的form-key
     * @param taskId 任务id
     */
	String findTaskFormKeyByTaskId(String taskId);

    /**
     * 根据任务id找到请假单
     * @param taskId 任务id
     */
	LeaveBill findLeaveBillByTaskId(String taskId);

    /**
     * 根据任务id找到下一步的连线名称
     * @param taskId 任务id
     */
	List<String> findOutComeListByTaskId(String taskId);

	void saveSubmitTask(WorkflowBean workflowBean);

    /**
     * 根据任务id找到所有以前审核的批注信息
     * @param taskId 任务id
     */
	List<Comment> findCommentByTaskId(String taskId);

    /**
     * 根据请假单id找到历史批注
     * @param id 请假单id
     */
	List<Comment> findCommentByLeaveBillId(Long id);

    /**
     * 根据任务id找到流程实例
     * @param taskId 任务id
     */
	ProcessDefinition findProcessDefinitionByTaskId(String taskId);

    /**
     * 根据任务id找到任务坐标
     * @param taskId 任务id
     */
	Map<String, Object> findCoordingByTask(String taskId);

	

}
